const { AsyncParallelBailHook } = require('tapable')

let hook = new AsyncParallelBailHook(['name']);

console.time('time1')
hook.tapAsync('tapAsync1', function (name, callback) {
  setTimeout(() => {
    console.log(`tapAsync1:`, name)
    callback();
  }, 1000)
})
hook.tapAsync('tapAsync2', function (name, callback) {
  setTimeout(() => {
    console.log(`tapAsync2:`, name)
    callback('err');// 熔断
  }, 2000)
})
hook.tapAsync('tapAsync3', function (name, callback) {
  setTimeout(() => {
    console.log(`tapAsync3:`, name)
    callback();
  }, 3000)
})

hook.callAsync('setTimeout', function () {
  console.timeEnd('time1')
})

